package com.frejoys.service;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.frejoys.common.dto.admin.*;
import com.frejoys.common.dto.app.CategoryIdDto;
import com.frejoys.common.dto.app.CodeDto;
import com.frejoys.common.dto.common.IdDto;
import com.frejoys.common.dto.store.CoreDataDto;
import com.frejoys.common.dto.store.StoreLngAndTelDto;
import com.frejoys.common.vo.admin.StoreAndCodeVo;
import com.frejoys.common.vo.admin.StoreIdAndNameListVo;
import com.frejoys.common.vo.app.StoreListInfoVo;
import com.frejoys.common.vo.app.StoreVo;
import com.frejoys.common.vo.store.CoreDataVo;
import com.frejoys.common.vo.store.MonthDataVo;
import com.frejoys.common.vo.store.StoreListVo;
import com.frejoys.dao.entity.Store;

import java.util.List;
import java.util.Map;

public interface StoreService extends IService<Store> {

    default Store getOnly(QueryWrapper<Store> wrapper) {
        wrapper.last("limit 1");
        return this.getOne(wrapper);
    }

    default Store getOnly(LambdaQueryWrapper<Store> wrapper) {
        wrapper.last("limit 1");
        return this.getOne(wrapper);
    }


    Store addInfo(StoreAddDto dto,Long userId);

    boolean upInfo(StoreUpDto dto);


    boolean delInfo(IdDto dto);


    // 获取品牌店铺
    List<Store> listBrandStore(Page<Store> page);

    // 获取附近5公里内店铺
    List<Store> listInfoNearby(Page<Store> page,Double lng,Double lat);

    //店铺列表
    IPage<com.frejoys.common.vo.admin.StoreVo> listInfo(StoreListDto dto);


    //主页店铺列表
    List<StoreListVo> storeAppListInfo(StoreLngAndTelDto storeLngAndTelDto);

    //店铺详情页
    StoreVo storeDetails(CodeDto dto);


    /**
     * 获取商家的店铺
     */
    List<Store> listBusinessStore(StoreListDto dto,Long userId);



    /**
     * 获取店铺id及名称
     */
    Map<Integer,String> getIdNameMap();


    /**
     * 获取指定店铺id及名称
     */
    Map<Integer,String> getIdNameMap(List<Integer> storeIds);

    //根据品类id查询店铺列表
    List<StoreListInfoVo> categoryIdStoreList(CategoryIdDto dto);

    //店铺列表加线下码信息
    IPage<StoreAndCodeVo> storeListInfo(StoreListDto dto);

    //管理员修改店铺上下架状态
    boolean upStoreShelves(UpShelvesDto dto);

    //获取本月数据
    MonthDataVo monthData(Long userId);

    //获取店铺名字列表
    List<StoreIdAndNameListVo> storeNameListInfo(Long userId);

    //店铺本月核心数据
    CoreDataVo coreData(CoreDataDto dto);

    //管理员查看店铺名字和log列表
    IPage<StoreIdAndNameListVo> storeNameList(StoreIdAndNameDto dto);

    //校验店铺是否有上架的商品和活动
    boolean verifyStoreGoodsAndActivity(Integer storeId);

}
